import java.util.ArrayList;
import java.util.List;

public class Diagrama {
	
	private String nomeDiagrama, nomeModelador;
	private float ptoAvaliacao, ptoVisualizacao;
	double ptoInicial;
	private boolean avaliou;
	private List<Integer> avaliacoes;
	private int qtdeDiagramasImportados, versao, fatorQualidade;
	private List<DiagramaAvaliado> listaDiagramaAvaliado;
	private String assunto;
	
	public List<DiagramaAvaliado> getListaDiagramaAvaliado() {
		return listaDiagramaAvaliado;
	}

	public void setListaDiagramaAvaliado(
			List<DiagramaAvaliado> listaDiagramaAvaliado) {
		this.listaDiagramaAvaliado = listaDiagramaAvaliado;
	}

	public int getQtdeDiagramasImportados() {
		return qtdeDiagramasImportados;
	}

	public void setQtdeDiagramasImportados(int qtdeDiagramasImportados) {
		this.qtdeDiagramasImportados = qtdeDiagramasImportados;
	}

	public Diagrama(){
		avaliou = false;
		ptoAvaliacao = 0;
		ptoInicial = 0;
		ptoVisualizacao = 0;		
		avaliacoes = new ArrayList<Integer>();
	}

	public boolean getAvaliou() {
		return avaliou;
	}

	public void setAvaliou(boolean avaliou) {
		this.avaliou = avaliou;
	}

	public String getNomeModelador() {
		return nomeModelador;
	}

	public void setNomeModelador(String nomeModelador) {
		this.nomeModelador = nomeModelador;
	}

	public String getNomeDiagrama() {
		return nomeDiagrama;
	}

	public void setNomeDiagrama(String nomeDiagrama) {
		this.nomeDiagrama = nomeDiagrama;
	}

	public float getPtoAvaliacao() {
		return ptoAvaliacao;
	}

	public void setPtoAvaliacao(float ptoAvaliacao) {
		this.ptoAvaliacao = ptoAvaliacao;
	}

	public double getPtoInicial() {
		return ptoInicial;
	}

	public void setPtoInicial(double ptoInicial2) {
		this.ptoInicial = ptoInicial2;
	}

	public float getPtoVisualizacao() {
		return ptoVisualizacao;
	}

	public void setPtoVisualizacao(float ptoVisualizacao) {
		this.ptoVisualizacao = ptoVisualizacao;
	}
	
	public double getTotalPtos(){
		double resultado;
		
		resultado = (0.1 * this.ptoInicial) + (0.6 * this.ptoAvaliacao) + (0.3 * this.ptoVisualizacao);
		
		return resultado;
	}

	public void addPontuacao(int tipo, double d) {
		if (tipo == 1){
			this.ptoVisualizacao += d;
		}
		else if (tipo == 2){
			this.ptoAvaliacao += d;
		}
	}

	public double getDesvioPadrao() {
		double retorno, media, variancia;
		
		retorno = 0;
		variancia = 0;
		
		media = getMedia();
		
		if (media > 0){
			for(int nota: avaliacoes){
				variancia += Math.pow(media - nota, 2);
			}
			
			variancia = variancia / (avaliacoes.size() - 1);
			
			if (variancia > 0){
				retorno = Math.sqrt(variancia);
			}
		}
			
		return retorno;
	}

	public double getMedia() {
		double media;
		int total;
		
		total = 0;
		media = 0;
		
		for(int nota: avaliacoes){
			total += nota;
		}
		
		if (total > 0){
			media = total / avaliacoes.size();
		}
		
		return media;
	}

	public int getQualidade() {
		int qualidade;
		
		if (fatorQualidade >= 80){
			qualidade = 3;
		}
		else if (fatorQualidade >= 40){
			qualidade = 2;
		}
		else{
			qualidade = 1;
		}
		
		return qualidade;
	}

	public int getVersao() {
		return versao;
	}

	public void setVersao(int versao) {
		this.versao = versao;
	}

	public int getFatorQualidade() {
		return fatorQualidade;
	}

	public void setFatorQualidade(int fatorQualidade) {
		this.fatorQualidade = fatorQualidade;
	}

	public String getAssunto() {
		return assunto;
	}

	public void setAssunto(String assunto) {
		this.assunto = assunto;
	}

	public void addNota(int nota) {
		this.avaliacoes.add(nota);		
	}
}
